</> 技術筆記Tech Notes

DXCore API: 型別

一、概述

此模組提供了一系列用於 JavaScript 型別判斷和資料處理的工具函式。它的核心功能是準確地獲取任何 JavaScript 物件的具體型別,並基於此提供大量的型別檢查函式(例如 是陣列, 是數字, 是null或空字串 等)。

此外,該模組還包含了一些實用的工具,如深拷貝物件、移除 Proxy、處理浮點數精度問題,以及從函式中提取元數據(如方法和參數名稱)等。這些工具旨在簡化開發過程中的常見任務,並提高程式碼的健壯性和可讀性。

二、屬性

此模組導出以下常數屬性,用於表示 JavaScript 的基本數據類型名稱。

屬性 描述
ARRAY 表示陣列 (Array) 類型的名稱。
BOOLEAN 表示布林值 (Boolean) 類型的名稱。
DATE 表示日期 (Date) 類型的名稱。
FUNCTION 表示函式 (Function) 類型的名稱。
NULL 表示空值 (Null) 類型的名稱。
NUMBER 表示數字 (Number) 類型的名稱。
OBJECT 表示物件 (Object) 類型的名稱。
REGEXP 表示正則表達式 (RegExp) 類型的名稱。
STRING 表示字串 (String) 類型的名稱。
UNDEFINED 表示未定義 (Undefined) 類型的名稱。

匯出到試算表

三、方法

取得類型

取得指定物件的類型名稱。

取得類型(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • string: 物件的類型名稱,如 “Array”, “String”, “Number” 等。

範例:

取得類型([]); // "Array"
取得類型(123); // "Number"

是陣列

判斷是否為陣列類型。

是陣列(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果參數是陣列類型則返回 true,否則返回 false

範例:

是陣列([]); // true
是陣列({}); // false

是布林值

判斷指定物件是否為布林值類型。

是布林值(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是布林值類型,則返回 true;否則返回 false

範例:

是布林值(true); // true
是布林值(false); // true
是布林值(0); // false

是日期

判斷是否為合法的日期類型。

是日期(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果參數是合法的日期類型則返回 true,否則返回 false

範例:

是日期(new Date()); // true
是日期("2023-01-01"); // false

是空字串

判斷物件是否為空字串。

是空字串(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是空字串,則返回 true;否則返回 false

範例:

是空字串(""); // true
是空字串("Hello"); // false

是函式

判斷物件是否為函式類型。

是函式(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是函式類型,則返回 true;否則返回 false

範例:

是函式(() => {}); // true
是函式(function test() {}); // true

是null

判斷物件是否為 null

是null(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是 null,則返回 true;否則返回 false

範例:

是null(null); // true
是null(123); // false

是null或未定義

判斷物件是否為 nullundefined

是null或未定義(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是 nullundefined,則返回 true;否則返回 false

範例:

是null或未定義(null); // true
是null或未定義(undefined); // true
是null或未定義(""); // false

是null或空字串

判斷物件是否為 nullundefined 或空字串。

是null或空字串(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是 nullundefined 或空字串,則返回 true;否則返回 false

範例:

是null或空字串(null); // true
是null或空字串(undefined); // true
是null或空字串(""); // true
是null或空字串("text"); // false

是數字

判斷物件是否為數字類型。

是數字(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是數字類型,則返回 true;否則返回 false

範例:

是數字(123); // true
是數字("123"); // false

是物件

判斷物件是否為物件(非陣列)類型。

是物件(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是對象類型,則返回 true;否則返回 false

範例:

是物件({}); // true
是物件([]); // false

是正則表達式

判斷物件是否為正則表達式類型。

是正則表達式(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是正則表達式,則返回 true;否則返回 false

範例:

是正則表達式(/abc/); // true
是正則表達式("abc"); // false

是字串

判斷物件是否為字串類型。

是字串(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是字串類型,則返回 true;否則返回 false

範例:

是字串("Hello"); // true
是字串(123); // false

是UUID

判斷是否為有效的 UUID 格式字串。

是UUID(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果是合法的 UUID,則返回 true,否則返回 false

範例:

是UUID("123e4567-e89b-12d3-a456-426655440000"); // true
是UUID("invalid-uuid"); // false

是未定義

判斷物件是否為 undefined

是未定義(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是 undefined,則返回 true;否則返回 false

範例:

是未定義(undefined); // true
是未定義(null); // false

是很小的值

判斷數值是否為很小的值(小於容差範圍 TOLERANCE)。

是很小的值(x)

參數:

  • x (number): 要檢查的數值。

返回:

  • boolean: 如果數值的絕對值小於 TOLERANCE,返回 true;否則返回 false

範例:

// 假設 TOLERANCE = 1.0E-8
是很小的值(1.0E-9); // true
是很小的值(0.01); // false

不是陣列

判斷物件是否不是陣列類型。

不是陣列(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是陣列類型,則返回 true;否則返回 false

範例:

不是陣列({}); // true
不是陣列([]); // false

不是布林值

判斷物件是否不是布林值類型。

不是布林值(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是布林值類型,則返回 true;否則返回 false

範例:

不是布林值(0); // true
不是布林值(true); // false

不是日期

判斷物件是否不是日期類型。

不是日期(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是日期類型,則返回 true;否則返回 false

範例:

不是日期("2023-01-01"); // true
不是日期(new Date()); // false

不是空字串

判斷物件是否為非空字串。

不是空字串(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件是非空字串,則返回 true;否則返回 false

範例:

不是空字串("Hello"); // true
不是空字串(""); // false

不是函式

判斷物件是否不是函式類型。

不是函式(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是函式類型,則返回 true;否則返回 false

範例:

不是函式(123); // true
不是函式(() => {}); // false

不是null

判斷物件是否不是 null

不是null(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是 null,則返回 true;否則返回 false

範例:

不是null(123); // true
不是null(null); // false

不是數字

判斷物件是否不是數字類型。

不是數字(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是數字類型,則返回 true;否則返回 false

範例:

不是數字("123"); // true
不是數字(123); // false

不是物件

判斷物件是否不是物件類型。

不是物件(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是物件類型,則返回 true;否則返回 false

範例:

不是物件([]); // true
不是物件({}); // false

不是正則表達式

判斷物件是否不是正則表達式類型。

不是正則表達式(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是正則表達式,則返回 true;否則返回 false

範例:

不是正則表達式("abc"); // true
不是正則表達式(/abc/); // false

不是字串

判斷物件是否不是字串類型。

不是字串(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是字串類型,則返回 true;否則返回 false

範例:

不是字串(123); // true
不是字串("Hello"); // false

不是未定義

判斷物件是否不是 undefined

不是未定義(obj)

參數:

  • obj (*): 要檢測的物件。

返回:

  • boolean: 如果物件不是 undefined,則返回 true;否則返回 false

範例:

不是未定義(null); // true
不是未定義(undefined); // false

相同類型

比較兩個值是否為相同的資料型別。

相同類型(obj1, obj2)

參數:

  • obj1 (*): 第一個值,用於比較的參數。

  • obj2 (*): 第二個值,用於比較的參數。

返回:

  • boolean: 若兩個值的型別相同則返回 true;若型別不同或無效輸入則返回 false

範例:

相同類型(123, 456); // true
相同類型([], {}); // false
相同類型(null, null); // true
相同類型(undefined, null); // false

複製物件

深拷貝一個物件。

複製物件(object)

參數:

  • object (Object): 要拷貝的物件。

返回:

  • Object: 返回物件的深拷貝。

範例:

const obj = { a: 1, b: { c: 2 } };
const copy = 複製物件(obj);
console.log(copy); // { a: 1, b: { c: 2 } }

取得方法

獲取物件及其原型鏈中所有非構造函式的函式名稱列表。

取得方法(obj)

參數:

  • obj (Object): 傳入的物件。

返回:

  • string[]: 包含所有函式名稱的陣列 (不重複)。

拋出:

  • TypeError: 如果參數不是一個物件。

取得參數名稱

提取函式的參數名稱列表。

取得參數名稱(func)

參數:

  • func (Function): 要提取參數名稱的函式。

返回:

  • string[]: 包含參數名稱的陣列;若輸入無效或無參數則返回空陣列。

拋出:

  • TypeError: 如果參數不是一個函式。

移除代理

深拷貝物件以移除 Proxy 並返回新的物件。

移除代理(obj)

參數:

  • obj (*): 需要移除 Proxy 的物件。

返回:

  • *: 返回新的深拷貝物件;nullundefined 將直接返回。

拋出:

  • Error: 當無法序列化物件時(例如循環引用)。

修正精確度誤差

修正精確度誤差,移除小數點後多餘的零並精確到指定的小數位數。

修正精確度誤差(x, [精確度=10])

參數:

  • x (number): 要修正的數值。

  • 精確度 (number, optional): 指定修正的小數位數範圍,預設為 10。

返回:

  • number: 返回修正後的數值。

範例:

修正精確度誤差(1.2300000000); // 1.23
修正精確度誤差(0.0000001, 7); // 0.0000001
修正精確度誤差(1.01111111, 4); // 1.0111

兩個數值相等

驗證兩個數值是否相等(在允許的誤差範圍內)。

兩個數值相等(a, b)

參數:

  • a (number): 第一個數值。

  • b (number): 第二個數值。

返回:

  • boolean: 如果兩個數值在允許的容差範圍內相等,返回 true;否則返回 false

範例:

// 假設 TOLERANCE = 1.0E-8
兩個數值相等(0.1 + 0.2, 0.3); // true
兩個數值相等(0.1, 0.2); // false

必須是函式

驗證輸入是否為函式。如果輸入存在且不是函式,則拋出 TypeError

必須是函式(函式)

參數:

  • 函式 (Function): 要驗證的目標值。

拋出:

  • TypeError: 如果輸入存在但不是函式時,拋出型別錯誤。

範例:

必須是函式(() => console.log('這是一個函式')); // 不會拋出錯誤
必須是函式(123); // 拋出型別錯誤
必須是函式(); // 不會拋出錯誤